package cn.yh.shop.admin.service.impl;

import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.yh.shop.admin.dao.AdminDao;
import cn.yh.shop.admin.model.Admin;
import cn.yh.shop.admin.service.IAdminRoleService;
import cn.yh.shop.admin.service.IAdminService;

/**
 * @Description:管理员的业务实现类
 * @author:"许荣斐"
 * @time:2016年12月14日 下午9:22:38
 */
@Service("adminService")
public class AdminServiceImpl implements IAdminService {

	/**
	 * @Description: adminDao : 引入adminDao
	 */
	@Autowired
	private AdminDao adminDao;
	@Autowired
	private IAdminRoleService adminRoleService;
	
	/**
	 * @Description:查询出所有的admin
	 * @return 返回值 : 存放有所有admin的集合
	 * @author: "许荣斐"
	 * @time:2016年12月14日 下午9:06:39
	 */
	@Override
	public List<Admin> selectAllAdmin() {
		return adminDao.selectAll();
	}

	/**
	 * @Description:根据admin的name和pwd查询出管理员,判断是否登录成功
	 * @param name 传入的管理员name
	 * @param pwd   传入的管理员密码
	 * @return 返回值:管理员是否登录成功
	 * @author: "许荣斐"
	 * @time:2016年12月14日 下午9:06:47
	 */
	@Override
	public Admin adminLogin(String name) {
		Admin selectOne = adminDao.queryByUserName(name);
			return selectOne;
	}

	/**
	 * @Description:更新管理员信息
	 * @param admin  管理员信息
	 * @return 返回值:操作后影响的行数
	 * @author: "许荣斐"
	 * @time:2016年12月14日 下午9:06:52
	 */
	public int updateOne(Admin admin) {
		return adminDao.update(admin);
	}

	@Override
	public List<String> queryAllPerms(Integer userId) {
		return adminDao.queryAllPerms(userId);
	}

	@Override
	public List<Integer> queryAllMenuId(Integer userId) {
		return adminDao.queryAllMenuId(userId);
	}

	@Override
	public Admin queryByUserName(String username) {
		return adminDao.queryByUserName(username);
	}
	
	@Override
	public Admin queryObject(Integer userId) {
		return adminDao.queryObject(userId);
	}

	@Override
	public List<Admin> queryList(Map<String, Object> map){
		return adminDao.queryList(map);
	}
	
	@Override
	public int queryTotal(Map<String, Object> map) {
		return adminDao.queryTotal(map);
	}

	@Override
	@Transactional
	public void save(Admin user) {
		user.setHiredate((Timestamp) new Date());
		//sha256加密
		//user.setPwd(new Sha256Hash(user.getPwd()).toHex());
		adminDao.save(user);
		
		//保存用户与角色关系
		adminRoleService.saveOrUpdate(user.getId(), user.getRoleIdList());
	}

	@Override
	@Transactional
	public void update(Admin user) {
//		if(StringUtils.isBlank(user.getPwd())){
//			user.setPwd(null);
//		}else{
//			user.setPwd(new Sha256Hash(user.getPwd()).toHex());
//		}
		adminDao.update(user);
		
		//保存用户与角色关系
		adminRoleService.saveOrUpdate(user.getId(), user.getRoleIdList());
	}

	@Override
	@Transactional
	public void deleteBatch(Integer[] userId) {
		adminDao.deleteBatch(userId);
	}

	@Override
	public int updatePassword(Integer userId, String password, String newPassword) {
		Map<String, Object> map = new HashMap<>();
		map.put("userId", userId);
		map.put("password", password);
		map.put("newPassword", newPassword);
		return adminDao.updatePassword(map);
	}
	
	public static void main(String[] args) {
		System.out.println(new Sha256Hash("admin").toHex());
	}

}
